package com.philips.work.service.impl;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.philips.work.mapper.YwDictMapper;
import com.philips.work.domain.YwDict;
import com.philips.work.service.IYwDictService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 字典Service业务层处理
 * 
 * @author philips
 * @date 2025-05-19
 */
@Service
public class YwDictServiceImpl implements IYwDictService 
{
    @Autowired
    private YwDictMapper ywDictMapper;

    /**
     * 查询字典
     * 
     * @param ids 字典主键
     * @return 字典
     */
    @Override
    public YwDict selectYwDictByIds(String ids)
    {
        return ywDictMapper.selectYwDictByIds(ids);
    }

    /**
     * 查询字典列表
     * 
     * @param ywDict 字典
     * @return 字典
     */
    @Override
    public List<YwDict> selectYwDictList(YwDict ywDict)
    {
        return ywDictMapper.selectYwDictList(ywDict);
    }

    /**
         * 通过业务字典类型名称，查询相关业务字典列表
     * @param dictType
     * @return
     */
    @Override
    public List<YwDict> findYwDictList(String dictType) {
        YwDict ywDict = new YwDict();
        ywDict.setDictType(dictType);
        return ywDictMapper.selectYwDictList(ywDict);
    }

    /**
     * 通过业务字典名称，查询业务字典详细信息
     * @param dictName
     * @return
     */
    @Override
    public YwDict getByName(String dictName) {
        YwDict ywDict = new YwDict();
        ywDict.setDictName(dictName);
        return (YwDict) ywDictMapper.selectYwDictList(ywDict);
    }

    /**
     * 新增字典
     * 
     * @param ywDict 字典
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertYwDict(YwDict ywDict)
    {
        if (existData(ywDict)) {
            throw new RuntimeException("字典名称重复");
        }
        return ywDictMapper.insertYwDict(ywDict);
    }

    /**
     * 修改字典
     * 
     * @param ywDict 字典
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateYwDict(YwDict ywDict)
    {
        if (existData(ywDict)) {
            throw new RuntimeException("字典名称重复");
        }
        ywDict.setUpTime(new Date());
        return ywDictMapper.updateYwDict(ywDict);
    }

    /**
     * 公用方法：验证写入的字典信息是否已经存在
     * @param ywDict
     * @return
     */
    private boolean existData(YwDict ywDict) {
        YwDict po = new YwDict();
        po.setDictType(ywDict.getDictType());
        po.setDictName(ywDict.getDictName());
        List<YwDict> list = ywDictMapper.selectYwDictList(po);
        // 默认没有非本数据记录中没有相同名称
        boolean flag = false;
        if(ywDict.getIds()!=null){
            // 更新操作
            if(list != null && !list.isEmpty()){
                for (YwDict po2 : list) {
                    // 非本数据记录中有相同名称
                    if (!po2.getIds().equals(ywDict.getIds())) {
                        flag = true;
                        break;
                    }
                }
            }
        }else {
            // 新增操作
            if(list != null && !list.isEmpty()){
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 批量删除字典
     * 
     * @param idss 需要删除的字典主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteYwDictByIdss(String[] idss)
    {
        return ywDictMapper.deleteYwDictByIdss(idss);
    }

    /**
     * 删除字典信息
     * 
     * @param ids 字典主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteYwDictByIds(String ids)
    {
        return ywDictMapper.deleteYwDictByIds(ids);
    }
}
